#!/bin/bash

# ===============================================
# RocketMQ 5.0 稳定启动脚本（适用于 macOS/Linux + Docker Desktop）
# 启动组件：
#   - NameServer（使用内联 JVM 命令）
#   - Broker（使用内联 JVM 命令）
#   - Dashboard
#   - 使用 docker 网络 rocketmq，确保互通
#
# 目录结构:
#   /Users/xuyudong/Applications/docker/rocketmq/
#   ├── start-rocketmq-5.sh     - rocketmq5.x 容器启动脚本
#   ├── create-topic-rocketmq.sh - 刷Topic脚本
#   ├── broker/
#   │   ├── conf/broker.conf
#   │   ├── logs/
#   │   └── store/
# ===============================================



set -e

# 设置路径（根据实际本地路径调整）
BASE_DIR="/Users/xuyudong/Applications/docker/rocketmq"
BROKER_CONF_PATH="$BASE_DIR/broker/conf/broker.conf"
LOG_PATH="$BASE_DIR/broker/logs"
STORE_PATH="$BASE_DIR/broker/store"

# 检查并删除旧容器（如果存在）
for container in rmqnamesrv rmqbroker rocketmq-dashboard; do
  if docker ps -a --format '{{.Names}}' | grep -q "^$container$"; then
    echo "[INFO] 删除已存在容器：$container"
    docker rm -f "$container"
  fi
done

# 创建网络
if ! docker network ls | grep -q rocketmq; then
  echo "[INFO] 创建 Docker 网络：rocketmq"
  docker network create rocketmq
else
  echo "[INFO] Docker 网络已存在：rocketmq"
fi

# 启动 NameServer（使用内联 JVM 命令）
echo "[INFO] 启动 NameServer..."
docker run -d --name rmqnamesrv \
  --platform=linux/amd64 \
  --network=rocketmq \
  -p 9876:9876 \
  --restart=always \
  apache/rocketmq:5.0.0 \
  java -server -Xms256m -Xmx256m -Xmn128m -XX:+UseG1GC \
  -cp /home/rocketmq/rocketmq-5.0.0/lib/* \
  org.apache.rocketmq.namesrv.NamesrvStartup

# 启动 Broker（使用内联 JVM 命令）
echo "[INFO] 启动 Broker..."
mkdir -p "$LOG_PATH" "$STORE_PATH"
docker run -d --name rmqbroker \
  --platform=linux/amd64 \
  --network=rocketmq \
  -e "NAMESRV_ADDR=rmqnamesrv:9876" \
  -p 10911:10911 -p 10909:10909 \
  --restart=always \
  -v "$LOG_PATH":/home/rocketmq/logs \
  -v "$STORE_PATH":/home/rocketmq/store \
  -v "$BROKER_CONF_PATH":/home/rocketmq/broker.conf \
  apache/rocketmq:5.0.0 \
  java -server -Xms512m -Xmx512m -Xmn256m -XX:+UseG1GC \
  -cp /home/rocketmq/rocketmq-5.0.0/lib/* \
  org.apache.rocketmq.broker.BrokerStartup \
  -c /home/rocketmq/broker.conf

# 启动 Dashboard（仍使用 JAVA_OPTS）
echo "[INFO] 启动 Dashboard..."
docker run -d --name rocketmq-dashboard \
  --platform=linux/amd64 \
  --network=rocketmq \
  -p 9880:8080 \
  --restart=always \
  -e "JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876" \
  apacherocketmq/rocketmq-dashboard:1.0.0

# 展示状态
echo "\n=============================="
echo "✅ 所有组件已启动完毕："
echo "- NameServer:      localhost:9876"
echo "- Broker:          localhost:10911"
echo "- Dashboard:       http://localhost:9880"
echo "=============================="

# 可选：打印 NameServer 日志片段用于确认
sleep 2
docker logs --tail=10 rmqnamesrv
